package random;

import java.net.BindException;

/**
 * 爱生气的书店老板
 *
 * 今天，书店老板有一家店打算试营业customers.length分钟。每分钟都有一些顾客（customers[i]）会进入书店，
 * 所有这些顾客都会在那一分钟结束后离开。
 * 在某些时候，书店老板会生气。 如果书店老板在第 i 分钟生气，那么 grumpy[i] = 1，否则 grumpy[i] = 0。
 * 当书店老板生气时，那一分钟的顾客就会不满意，不生气则他们是满意的。
 * 书店老板知道一个秘密技巧，能抑制自己的情绪，可以让自己连续X 分钟不生气，但却只能使用一次。
 * 请你返回这一天营业下来，最多有多少客户能够感到满意的数量。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/grumpy-bookstore-owner
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

public class L1052 {

    public static void main(String[] args) {
//        int[] customers = {1,0,1,2,1,1,7,5};
//        int[] grumpy= {0,1,0,1,0,0,1,1};
//        int result = maxSatisfied(customers, grumpy, 3);
        int[] customers = {2,2,7};
        int[] grumpy= {0,1,1};
        int result = maxSatisfied(customers, grumpy, 3);
        System.out.println(result);
    }

    // 暴力解法， 先看哪个区间的生气数较大，就把哪个区间标记起来，然后进行求和
    public static int maxSatisfied(int[] customers, int[] grumpy, int X) {

        int temp = 0;
        int index = 1000;
        for (int i = 0; i < grumpy.length; i++) {
            if (grumpy[i] == 1) {
                int sum = 0;
                if (i+X > grumpy.length) {
                    for (int j = 0; j < X; j++) {
                        if (i-j >= 0){
                            if (grumpy[i-j] == 1){
                                sum += customers[i-j];
                            }
                        }

                    }
                }else {
                    for (int j = 0; j < X; j++) {
                        if (grumpy[i+j] == 1){
                            sum += customers[i+j];
                        }
                    }
                }
                if (temp < sum){
                    temp = sum;
                    if (i+X > grumpy.length){
                        index = i-X+1;
                    }else {
                        index = i;
                    }
                }
                System.out.println(temp + " " + index);
            }
        }

        int result = 0;
        for (int i = 0; i < customers.length; i++) {
            if (grumpy[i] == 0 ) {
                result += customers[i];
            }
            if (i>=index && i < index+X && grumpy[i] == 1) {
                result += customers[i];
            }
        }
        return result;
    }

    /*
    官方答案(窗口计算法)
    具体的算法看官网
     */
    public static int maxSatisfied1(int[] customers, int[] grumpy, int X) {

        int total = 0;
        int n = customers.length;
        for (int i = 0; i < n; i++) {
            if (grumpy[i] == 0) {
                total += customers[i];
            }
        }
        int increase = 0;
        for (int i = 0; i < X; i++) {
            increase += customers[i] * grumpy[i];
        }
        int maxIncrease = increase;
        for (int i = X; i < n; i++) {
            increase = increase - customers[i - X] * grumpy[i - X] + customers[i] * grumpy[i];
            maxIncrease = Math.max(maxIncrease, increase);
        }
        return total + maxIncrease;

//        作者：LeetCode-Solution
//        链接：https://leetcode-cn.com/problems/grumpy-bookstore-owner/solution/ai-sheng-qi-de-shu-dian-lao-ban-by-leetc-dloq/
//        来源：力扣（LeetCode）
//        著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
    }


}
